var express = require("express");
const ProductController = require("../../controllers/admin/ProductController"); // 接口需处理的内容
var ProductRouter = express.Router();

/**
 * 文件上传
 */
const multer = require("multer");
const path = require("path");
const fs = require("fs");

// 检查目录是否存在的函数
const ensureDirectoryExistence = (filePath) => {
  if (!fs.existsSync(filePath)) {
    fs.mkdirSync(filePath, { recursive: true }); // 使用 recursive 选项递归创建目录
  }
};

// 文件上传的基础配置
const baseStorage = multer.diskStorage({
  destination: function (req, file, cb) {
    const dest = "public/images/product/";
    ensureDirectoryExistence(dest); // 确保目录存在
    cb(null, dest);
  },
  filename: function (req, file, cb) {
    // 提取文件后缀
    const extname = path.extname(file.originalname);
    // 生成新的文件名：时间戳 + 后缀
    cb(null, Date.now() + extname);
  },
});

/**
 * 产品图片上传
 */
// 检查文件类型
const checkFileType = (allowedFileTypes, file, cb) => {
  // 构建正则表达式，匹配文件扩展名（不带点号）
  const filetypesRegex = new RegExp(`^(${allowedFileTypes.join("|")})$`, "i");

  // 获取文件扩展名（不带点号并转换为小写）
  const extname = path.extname(file.originalname).slice(1).toLowerCase();

  // 如果文件类型不符合要求，使用 cb(error) 回调函数返回错误
  if (filetypesRegex.test(extname)) {
    return cb(null, true);
  } else {
    const allowedTypesList = allowedFileTypes.join(", ");
    cb(new Error(`文件类型不符合要求! 允许的文件类型为: ${allowedTypesList}`));
  }
};
const uploadImage = multer({
  storage: baseStorage,
  fileFilter: function (req, file, cb) {
    // 只允许图片文件
    const filetypes = ["jpeg", "jpg", "png"];
    checkFileType(filetypes, file, cb);
  },
  // 文件大小限制为1MB
  limits: { fileSize: 1024 * 1024 * 1 },
}).single("file");

/**
 * 接口定义-产品管理
 */

// 添加
ProductRouter.post("/adminapi/product/add", uploadImage, ProductController.add);
// 删除(通过_id)
ProductRouter.delete("/adminapi/product/list/:id",ProductController.deleteListItem);
// 查找(全部)
ProductRouter.get("/adminapi/product/list", ProductController.getListById);
// 查找(通过指定_id)
ProductRouter.get("/adminapi/product/list/:id", ProductController.getListById);
// 查找(列表分页)
ProductRouter.get("/adminapi/product/listOfPage", ProductController.getListOfPage);
// 修改(传参：content-type:multipart/form-data)
ProductRouter.put(
  "/adminapi/product/list/:id",
  uploadImage,
  ProductController.putListItem
);
// 修改-发布状态
ProductRouter.put("/adminapi/product/publish", ProductController.publish);

module.exports = ProductRouter;
